#ifndef DECK_H
#define DECK_H
#include"card.h"
#include<QVector>
#include<QObject>
#include<QString>
#include<QGraphicsPixmapItem>
#include<QDebug>
#include <random>
#include"mscene.h"
#include"carditem.h"
#include"graphicsutils.h"
#include"JudgeCard.h"
//该类用于初始化牌堆，洗牌，创建卡牌图像等等

class QGraphicsScene;
class Deck: public QObject
{
    Q_OBJECT
public:
    //static void addItemToScene(QGraphicsScene* scene);
    Deck();
    bool isOut[52];//是否发过该牌
    QVector<Card> m_deck;//定义一个card类数组
    QVector<CardItem*> ReadyCards;//准备区的卡牌的值
    void InReady();//将被点击的卡牌加入准备区
    void InAlready();//出牌按钮绑定的函数
    void OutAlready();//弃牌按钮绑定的函数
    int TheScore=0;//总得分
    QVector<CardItem*> HandCards;//当前所含手牌
    mScene* CardScene;//为显示卡牌定义对象
    void dealCards();//发牌函数
    GraphicsUtils* Utils_1;
private:
    void PublicFun();//出牌和弃牌公用的函数
    void createCardImage(int i,const QPointF& pos, Card card);//创建函数图像
    int getRandom(int min, int max);//获得随机数
    void generateRandomRankOriginal(QVector<int>& vec,int n);//生成不重复数的数组
    void BubbleSort(QVector<int>& vec);
    JudgeCard *m_JudgeCard;
    //出牌后要先获取要出牌在数组中的位置和实际位置，从大到小删去这些牌删去手牌中的这些牌，清空准备区，加入出牌函数，补充牌数，
};

#endif // DECK_H
